package com.wei.czz.framework.admin.service;

import com.wei.czz.common.po.admin.deptRole.DeptRolePagePo;
import com.wei.czz.common.po.admin.userRole.UserRolePo;
import com.wei.czz.common.tool.PageDto;
import com.wei.czz.common.vo.admin.deptRole.DeptRoleFormVo;
import com.wei.czz.common.vo.admin.role.RoleFormVo;
import com.wei.czz.common.vo.admin.roleGroup.RoleGroupFormVo;
import com.wei.czz.framework.admin.entity.RoleEntity;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2021-03-15 10:28:29
 * className: RoleService 系统角色操作请求服务接口
 * version: 1.0
 * description:
 */
public interface RoleService {

    /**
     * 保存角色信息操作
     * @param role 角色对象
     */
    void saveOrEdit(RoleEntity role);

    /**
     * 批量保存角色操作
     * @param roleList 角色对象列表
     */
    void batchSave(List<RoleEntity> roleList);

    /**
     * 分页获取角色操作
     * @param roleVo 查询参数对象
     * @return 角色分页数据
     */
    PageDto<RoleEntity> getPageList(RoleFormVo roleVo);

    /**
     * 分页获取部门角色操作
     * @param deptRoleFormVo 参数对象
     * @return 角色分页数据
     */
    PageDto<DeptRolePagePo> getDeptRolePageList(DeptRoleFormVo deptRoleFormVo);

    /**
     * 分页获取角色授权组关联角色操作
     * @param roleGroupFormVo 参数对象
     * @return 角色分页数据
     */
    PageDto<RoleEntity> getRoleSpacePageList(RoleGroupFormVo roleGroupFormVo);

    /**
     * 获取角色操作
     * @return 角色对象列表
     */
    List<RoleEntity> getList();

    /**
     * 获取角色操作
     * @param roleIdList 角色主键列表
     * @return 角色对象列表
     */
    List<RoleEntity> getList(List<Long> roleIdList);

    /**
     * 获取角色操作
     * @param roleId 角色主键
     * @return 角色对象
     */
    RoleEntity get(Long roleId);

    /**
     * 获取角色下一个默认排序等级操作
     * @return 角色下一个默认排序等级数值
     */
    Integer getNextSort();

    /**
     * 获取角色操作
     * @param roleKeyList 角色键列表
     * @return 角色对象列表
     */
    List<RoleEntity> findList(List<String> roleKeyList);

    /**
     * 获取用户关联角色操作
     * @param userId 用户主键
     * @param status 角色状态
     * @return 角色对象列表
     */
    List<UserRolePo> findList(Long userId, Integer status);

    /**
     * 删除角色操作
     * @param roleIdList 角色主键列表
     */
    void delete(List<Long> roleIdList);

}

